仕様を満たした型
を設計する[仕様を満たしていることをデータ構造で表現する]仕様を型で表現する[型は仕様]「ある値が、この型に属している場合は、仕様を満たしている」ということを表現できるような型を設計する
Maybe (a, b)
を取るように修正する [(a, b)]
を取るように変えればいい UnvalidateedAddress
と ValidatedAddress
のような型で区別した際に、何かの検査の後に達する状態の方( ValidatedAddress
)はprivateにしておくと良いtype Contact =
{
Name: PersonalName;
PrimaryContactMethod: ContactMethod;
SecondaryContactMethods: ContactMethod list;
}
type ContactMethod =
| Email of EmailContactInfo
| PostalAddress of PostalContactInfo
| HomePhone of PhoneContactInfo
| WorkPhone of PhoneContactInfo
PrimaryContactMethod: ContactMethod
SecondaryContactMethods: ContactMethod list;